package org.example.completed.controller;

import org.example.completed.domain.User;
import org.example.completed.dto.UserLoginDto;
import org.example.completed.dto.UserRegisterDto;
import org.example.completed.service.UserService;
import org.example.completed.utils.ApiResponse;
import org.example.completed.utils.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;


@RestController//@Controller 代表这个类会被springboot 接管
//被@Controller这个注解的类，中的所有方法，如果返回值是String，并且有具体的页面可以跳转，那么就会被视图解析器解析
public class UserController {

    @Autowired
    private UserService userService;

    // 注册
    @PostMapping("/user/save")
    public ApiResponse<?> saveUser(@RequestBody UserRegisterDto userRegisterDto) {
        if (userRegisterDto == null) {
            return ApiResponse.failure("操作失败: 请求参数为空");
        }
        if (userRegisterDto.getUsername() == null || userRegisterDto.getPassword() == null || userRegisterDto.getUserAcoount() == null ||userRegisterDto.getAge() == null || userRegisterDto.getSex() == null) {
            return ApiResponse.failure("操作失败: 请求参数不完整");
        }
        User user = new User();
        user.setUserAcoount(userRegisterDto.getUserAcoount());  // 用户名
        user.setUsername(userRegisterDto.getUsername());    // 账户
        user.setPassword(userRegisterDto.getPassword());    // 建立密码
        user.setSex(userRegisterDto.getSex());  // 建立性别
        user.setAge(userRegisterDto.getAge());  // 创建年龄
        user.setImg(userRegisterDto.getImg());  //补上图片
        // 差个图片

        if (userService.selectUser(user) != null) {
            return ApiResponse.failure("此账号与密码已重复");
        }
        userService.saveUser(user);
        return ApiResponse.success("注册成功","注册成功");
    }


    // 登录
    @PostMapping("/user/login")
    public ApiResponse<?> loginIn(@RequestBody UserLoginDto userLoginDto) {
        // 检查输入
        if (userLoginDto == null) {
            return ApiResponse.failure("操作失败: 输入为空值");
        }

        // 验证用户是否存在
        User user = new User();
        user.setUsername(userLoginDto.getUsername());
        user.setPassword(userLoginDto.getPassword());
        User existingUser = userService.selectUser(user);
        if (existingUser == null) {
            return ApiResponse.failure("无此账号");
        }
        // 用户验证成功，生成 JWT Token
        String token = JwtUtil.createJwtToken(existingUser.getUsername());

        // 生成键值对数据
        Map<String, Object> res = new HashMap<>();
        res.put("token", token);
        res.put("userAccount", existingUser.getUserAcoount());
        res.put("age", existingUser.getAge());
        res.put("sex", existingUser.getSex());
        res.put("money", existingUser.getMoney());
        res.put("img",existingUser.getImg());
        res.put("right",existingUser.getRights());
        // 将生成的 Token 返回给前端
        return ApiResponse.success(res, "登录成功");
    }

    public static  class UpdateUserRightsRequest {
        private String username;  // 用户名
        private String rights;  // 用户权益（vip 或 普通用户）

        // Getter 和 Setter 方法
        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getRights() {
            return rights;
        }

        public void setRights(String rights) {
            this.rights = rights;
        }
    }

    // 更新用户权益，使用POST请求
    @PostMapping("/rights")
    public ApiResponse updateUserRights(@RequestBody UpdateUserRightsRequest request) {
        // 校验权益值
        if (!request.getRights().equals("vip") && !request.getRights().equals("普通用户")) {
            return ApiResponse.failure("无效的权益类型");
        }
        userService.updateUserRights(request.getUsername(), request.getRights()); // 调用服务层方法更新用户权益
        return ApiResponse.success(null, "用户权益更新成功");
    }
}

